# --------------------------------------------------
# -*- coding: utf-8 -*-
# Time: 2023/2/13 11:01
# Author: 沈凌鹏
# Version: 1.1
# Update content:对文档进行归类整理，对整理后的报错进行修改
# File: Main.py
# Description: 用于执行游戏主流程
# --------------------------------------------------
# - 每行代码，或每个方法要求添加注释(基础不好的同学)题目内容:
# 1.一个回合制游戏，有两个英雄，分别以两个类进行定义。分别是Timo和Jinx。每个英雄都有 hp 属性和power属性，hp 代表血量，power 代表攻击力
# 2.每个英雄都有一个fight方法，fight方法需要传入“enemy_hp”(敌人的血量)，“enemy_power(敌人的攻击力)两个参数。需要计算对打一轮过后双方的
#   最终血量，英雄最终的血量=英雄hp属性-敌人的攻击力enemy_power敌人最终的血量=敌人的血量enemy_hp-英雄的power属性
# 3.对比英雄最终的血量和敌人最终的血量，血量剩余多的人获胜。如果英雄赢了打印“英雄获胜”，如果敌人赢了，打印“敌人获胜”
# 4.使用继承、简单工厂方法等各种方式优化你的代码

import Role.Hero as Hero, json, Item.ItemFactory as ItemFactory

while True:
    try:
        choose = int(input("请选择英雄：1.Timo 2.Jinx 3.自定义英雄 4.退出\n"))
        if choose == 1:
            # 读取json文件内Timo的信息
            Timo = json.load(open("Role/HeroList", "r"))
            print("以下为角色信息："
                  "\n名称：", Timo[0]["name"],
                  "\n体力", Timo[0]["hp"],
                  "\n力量", Timo[0]["power"],
                  "\n速度", Timo[0]["speed"])
            # 实例化英雄
            timo = Hero.Timo(Timo[0]["hp"], Timo[0]["power"], Timo[0]["speed"])
            print("请输入敌人的属性：")
            enemy_hp = float(input("请输入体力:"))
            enemy_power = float(input("请输入力量:"))
            enemy_speed = float(input("请输入速度:"))
            # 进行战斗
            timo.fight(enemy_hp, enemy_power, enemy_speed)

        elif choose == 2:
            # 读取json文件内Jinx的信息
            Jinx = json.load(open("Role/HeroList", "r"))
            print("以下为角色信息："
                  "\n名称：", Jinx[1]["name"],
                  "\n体力", Jinx[1]["hp"],
                  "\n力量", Jinx[1]["power"],
                  "\n速度", Jinx[1]["speed"],
                  "\n防御", Jinx[1]["defences"])
            # 实例化英雄
            jinx = Hero.Jinx(Jinx[1]["hp"], Jinx[1]["power"], Jinx[1]["speed"], Jinx[1]["defences"])
            print("请输入敌人的属性：")
            enemy_hp = float(input("请输入体力:"))
            enemy_power = float(input("请输入力量:"))
            enemy_speed = float(input("请输入速度:"))
            enemy_defences = float(input("请输入防御:"))
            # 进行战斗
            jinx.fight(enemy_hp, enemy_power, enemy_speed, enemy_defences)

        elif choose == 3:
            # 设置自定义英雄
            print("请自定义英雄属性:")
            my_hp = float(input("请输入体力:"))
            my_power = float(input("请输入力量:"))
            my_speed = float(input("请输入速度:"))
            my_defences = float(input("请输入防御:"))
            # 通过简单工厂选择道具
            item_choose = input("请选择加成道具：")
            OPFactory = ItemFactory.OperationFactory()
            OPType = OPFactory.ChooseOperation(item_choose)
            # 计算英雄使用道具后的属性
            OPType.hp = my_hp
            OPType.power = my_power
            OPType.speed = my_speed
            OPType.defences = my_defences
            # 实例化英雄
            MyHero = Hero.Jinx(OPType.hp, OPType.power, OPType.speed, OPType.defences)
            print("请输入敌人的属性：")
            enemy_hp = float(input("请输入体力:"))
            enemy_power = float(input("请输入力量:"))
            enemy_speed = float(input("请输入速度:"))
            enemy_defences = float(input("请输入防御:"))
            # 进行战斗
            MyHero.fight(enemy_hp, enemy_power, enemy_speed, enemy_defences)

        elif choose == 4:
            print("游戏结束")
            break
    except ValueError:
        print("请输入正确的选项")
